# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# 
# Copyright (C) 2025, GEM Foundation
# 
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake.  If not, see <http://www.gnu.org/licenses/>.

"""
Postprocessing operations collecting together the results of multiple jobs
"""

import logging
from openquake.baselib import hdf5, performance
from openquake.commonlib import datastore
from openquake.calculators import base


def build_ses(jobs, out_file):
    """
    Build an HDF5 file with the global SES by importing the ruptures
    generated by each job.
    """
    with performance.Monitor(measuremem=True) as mon:
        fnames = [datastore.read(job.calc_id).filename
                  for job in jobs if job.get_job().status == 'complete']
        logging.warning(f'Saving {out_file}')
        with hdf5.File(out_file, 'w') as h5:
            base.import_sites_hdf5(h5, fnames)
            base.import_ruptures_hdf5(h5, fnames)
            h5['oqparam'] = jobs[0].get_oqparam()
    print(mon)
